/**
 * 3D Tiles 规范中定义的基本类型
 * 基于 3D Tiles 1.1 标准
 */

/**
 * 地理区域（WGS84 坐标系）
 * [西经, 南纬, 东经, 北纬, 最小高度, 最大高度]
 */
export type Region = [number, number, number, number, number, number];

/**
 * 笛卡尔坐标系中的长方体
 * [中心点X, 中心点Y, 中心点Z, 半长X, 半长Y, 半长Z]
 */
export type Box = [number, number, number, number, number, number];

/**
 * 球体
 * [中心点X, 中心点Y, 中心点Z, 半径]
 */
export type Sphere = [number, number, number, number];

/**
 * 瓦片的空间包围体
 */
export type BoundingVolume = {
  region?: Region;
  box?: Box;
  sphere?: Sphere;
};

/**
 * 瓦片内容
 */
export type TileContent = {
  uri: string;
  boundingVolume?: BoundingVolume;
  [key: string]: any; // 支持扩展属性
};

/**
 * 瓦片节点
 */
export interface Tile {
  boundingVolume: BoundingVolume;
  geometricError: number;
  refine?: 'REPLACE' | 'ADD';
  content?: TileContent;
  children?: Tile[];
  transform?: number[];
  [key: string]: any; // 支持扩展属性
}

/**
 * 数据集元信息
 */
export interface Asset {
  version: string;
  tilesetVersion?: string;
  [key: string]: any; // 支持扩展属性
}

/**
 * 3D Tiles 数据集
 */
export interface Tileset {
  asset: Asset;
  geometricError: number;
  root: Tile;
  extensionsUsed?: string[];
  extensionsRequired?: string[];
  properties?: Record<string, any>;
  [key: string]: any; // 支持扩展属性
}

/**
 * 解析选项
 */
export interface ParseOptions {
  validate?: boolean; // 是否在解析后验证结构
}

/**
 * 验证结果
 */
export interface ValidationResult {
  valid: boolean;
  errors: string[];
  warnings: string[];
}